package com.ch.bsbdj.task;

import com.ch.bsbdj.service.CrawlerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component
public class CrawlerTask {

    Logger logger = LoggerFactory.getLogger(getClass());

    @Value("${app.crawler.urls}")
    private String urls;

    @Value("${app.crawler.enabled}")
    private Boolean enabled;//开启关闭爬虫

    @Autowired
    private CrawlerService crawlerService;

    //注解用于指定当前方法用于任务调度 crow 表达式指定执行的间隔
    //* * * * * ? 每秒执行一次
    //用法： 秒 分 时 日 月 星期
    //* 代表任意，具体的数字代表精确值   逗号代表多个值       /用于固定间隔   -范围  ?忽略
    //0 * 23  * * ?       23点到24点 每分钟执行一次
    //0 0 8-18 * * ?      每天8到18点，0分0秒执行一次
    //0 0 */2 * * ?       0 2 4 6 ... 22 0点0分执行一次
    @Scheduled(cron = "${app.crawler.cron}")//每小时执行一次
    public void crawlerRunner(){
        if (!enabled){
            logger.warn("爬虫任务已被禁止，如需启用请设置app.crawler.enabled");
            return;
        }

        //1.抓去原始数据
        //url模板
        String template ="http://d.api.budejie.com/v2/topic/list/29/{str}/budejie-android-8.0.8/0-25.json";
        String[] templates = urls.split(",");

        for (int i = 0; i < templates.length; i++) {
            logger.info("正在抓取第{}个模块的代码",i+1);
            Map context = new HashMap();
            context.put("count",0);
            crawlerService.crawl(context,templates[i],"0-0",(i+1));
        }

        //对source表数据进行处理
        crawlerService.etl();
    }
}
